<?php

require_once("lib/db/mysqlDatabase.php");
require_once("EquipoTorneo.php");
define("W", 1700);
define("H", 60);
define("ANCHO", 160);
define("PADDING", 40);
define("DESPLAZAMIENTO_ARRIBA_FINAL", 200);

class EncuentroTorneo {
	var $id;
	var $padre;
	var $hijoIzquierda;
	var $hijoDerecha;
	var $equipo1;
	var $equipo2;
	var $golesEquipo1;
	var $golesEquipo2;
	var $fecha;
	var $torneo;
	var $nivel;
	var $estado;
	var $comentarios;
	var $golesEquipo1Aux;
	var $golesEquipo2Aux;
			
	function __construct($padre, $torneo, $nivel, $id=NULL){
		$this->padre = $padre;
		$this->torneo = $torneo;	
		$this->nivel = $nivel;
		$this->id = $id;
	}
	
	function enviarNotificacionPartidoValidado(){
		$texto = '<p>One of the matches that you have played has a validated score!. <a href="http://www.pes6j.net/tournament/index.php?s=my-matches">Check your matches</a></p>';
		$textoSiguientePartido = "<p>You have won the match. A new match has been setted up for you!</p>";
		$textoFinal = "<p>You have won the tournament! Congrats</p>";
		if($this->equipo1->jugador1){
			if(($this->golesEquipo1 > $this->golesEquipo2) && $this->padre != 0)
				$texto .= $textoSiguientePartido;
			else if(($this->golesEquipo1 > $this->golesEquipo2) && $this->padre == 0)
				$texto .= $textoFinal;
			sendNotificationMail($this->equipo1->jugador1, $texto);
		}
		if($this->equipo1->jugador2){
			if(($this->golesEquipo1 > $this->golesEquipo2) && $this->padre != 0)
				$texto .= $textoSiguientePartido;
			else if(($this->golesEquipo1 > $this->golesEquipo2) && $this->padre == 0)
				$texto .= $textoFinal;
			sendNotificationMail($this->equipo1->jugador2, $texto);
		}
		if($this->equipo2->jugador1){
			if(($this->golesEquipo2 > $this->golesEquipo1) && $this->padre != 0)
				$texto .= $textoSiguientePartido;
			else if(($this->golesEquipo2 > $this->golesEquipo1) && $this->padre == 0)
				$texto .= $textoFinal;
			sendNotificationMail($this->equipo2->jugador1, $texto);
		}	
		if($this->equipo2->jugador2){
			if(($this->golesEquipo2 > $this->golesEquipo1) && $this->padre != 0)
				$texto .= $textoSiguientePartido;
			else if(($this->golesEquipo2 > $this->golesEquipo1) && $this->padre == 0)
				$texto .= $textoFinal;
			sendNotificationMail($this->equipo2->jugador2, $texto);
		}
	}
	
	function crearHijos($nivel){		
		if($nivel > ($this->nivel)){
			/* Se crean nuevos hijos */				
			$this->hijoIzquierda = new EncuentroTorneo($this->id, $this->torneo, $this->nivel+1);
			$this->hijoIzquierda->insertar();
			$this->hijoDerecha = new EncuentroTorneo($this->id, $this->torneo, $this->nivel+1);
			$this->hijoDerecha->insertar();
			$this->guardarHijos();
			$this->hijoIzquierda->crearHijos($nivel);
			$this->hijoDerecha->crearHijos($nivel);
		}
	}
	
	function insertar(){
		$data = array(NULL, $this->torneo->id, $this->padre, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);		
		$insert = new mysqlInsert("tournament", "", "partido_torneo", $data);
		$insert->execute();
		$this->id = $insert->getInsertedId();
	}
	
	function guardarEquipos(){
		$values = array("equipo1", "equipo2", "estado");
		$data = array($this->equipo1->id, $this->equipo2->id, 1);
		$update = new mysqlUpdate("tournament", "", "partido_torneo", $values, $data, "`id`='".$this->id."'");
		$update->execute();
	}
	
	function guardarHijos(){
		$values = array("hijo_izquierdo", "hijo_derecho");
		$data = array($this->hijoIzquierda->id, $this->hijoDerecha->id);
		$update = new mysqlUpdate("tournament", "", "partido_torneo", $values, $data, "`id`='".$this->id."'");
		$update->execute();
	}
	
	function encontrarHijoSinPartidos($equipo1, $equipo2){
		if(!$this->hijoIzquierda && !$this->hijoDerecha && !$this->equipo1 && !$this->equipo2){
			$this->equipo1 = $equipo1;
			$this->equipo2 = $equipo2;
			$this->guardarEquipos();			
			return TRUE;
		}else if($this->hijoIzquierda && $this->hijoDerecha){
			if(!$this->hijoIzquierda->encontrarHijoSinPartidos($equipo1, $equipo2)){
				return $this->hijoDerecha->encontrarHijoSinPartidos($equipo1, $equipo2);
			}else{
				return TRUE;
			}
		}
	}
	
	function validarResultado(){
		if($this->padre != 0){
			$encuentroPadre = new EncuentroTorneo(0,0,0, $this->padre);
			$encuentroPadre->getFromDB(FALSE);
			if($this->golesEquipo1 > $this->golesEquipo2){
				$encuentroPadre->actualizarEquipos($this->id, $this->equipo1);
			}else if($this->golesEquipo1 < $this->golesEquipo2){
				$encuentroPadre->actualizarEquipos($this->id, $this->equipo2);
			}else{
				if($this->golesEquipo1Aux > $this->golesEquipo2Aux){					
					$encuentroPadre->actualizarEquipos($this->id, $this->equipo1);
				}else{
					$encuentroPadre->actualizarEquipos($this->id, $this->equipo2);
				}
			}
		}
	}
			
	function apuntarResultado($golesEquipo1, $golesEquipo2){
		$this->golesEquipo1 = $golesEquipo1;
		$this->golesEquipo2 = $golesEquipo2;
		
		$values = array("goles_equipo1", "goles_equipo2", "estado");
		$data = array($this->golesEquipo1, $this->golesEquipo2, 2);			
		
		$update = new mysqlUpdate("tournament", "", "partido_torneo", $values, $data, "`id`='".$this->id."'");
		$update->execute();

		procesarPartido($this->equipo1->jugador1->id, $this->equipo1->jugador2->id, $this->equipo2->jugador1->id, $this->equipo2->jugador2->id, $this->equipo1->equipo->id, $this->equipo2->equipo->id, $golesEquipo1, $golesEquipo2, null);
		
		$encuentroPadre = new EncuentroTorneo(0,0,0,$this->padre);
		$encuentroPadre->getFromDB(FALSE);
		
		if($this->padre == 0){
			if($this->golesEquipo1 > $this->golesEquipo2){
				$this->equipo1->darPuntos($this->padre);
				$this->equipo2->quitarPuntos($this->padre);
			}
			else{
				$this->equipo2->darPuntos($this->padre);
				$this->equipo1->quitarPuntos($this->padre);
			}
		}else{
			if($this->golesEquipo1 > $this->golesEquipo2){					
				$this->equipo1->darPuntos($this->padre);
				$this->equipo2->quitarPuntos($this->padre);
				$encuentroPadre->actualizarEquipos($this->id, $this->equipo1);
			}else{					
				$this->equipo2->darPuntos($this->padre);
				$this->equipo1->quitarPuntos($this->padre);
				$encuentroPadre->actualizarEquipos($this->id, $this->equipo2);
			}
		}				
	}
	
	function actualizarEquipos($idHijo, $equipoGanador){
		if($this->hijoIzquierda->id == $idHijo){
			$this->equipo1 = $equipoGanador;
		}
		if($this->hijoDerecha->id == $idHijo){
			$this->equipo2 = $equipoGanador;				
		}
		$this->estado = 1;
		$values = array("equipo1", "equipo2", "estado");
		$data = array($this->equipo1->id, $this->equipo2->id, $this->estado);
		$update = new mysqlUpdate("tournament", "", "partido_torneo", $values, $data, "`id`='".$this->id."'");
		$update->execute();
	}
	
	function getFromDB($getHijos=TRUE){
		if(!$this->id)
			$where = "`torneo`='".$this->torneo->id."' AND `padre`='".$this->padre."'";
		else
			$where = "`id`='".$this->id."'";
		$query = new mysqlQuery("tournament", "", "partido_torneo", "*", $where, "", "");
		$query->execute();
		$row = $query->next();
		
		$this->id = $row["id"];
		
		if($getHijos == TRUE){
			if($row["hijo_izquierdo"] != 0){
				$this->hijoIzquierda = new EncuentroTorneo($this->id, $this->torneo, $this->nivel+1, $row["hijo_izquierdo"]);
				$this->hijoIzquierda->getFromDB();
			}			
			if($row["hijo_derecho"] != 0){
				$this->hijoDerecha = new EncuentroTorneo($this->id, $this->torneo, $this->nivel+1, $row["hijo_derecho"]);
				$this->hijoDerecha->getFromDB();
			}
		}else{
			if($row["hijo_izquierdo"] != 0){
				$this->hijoIzquierda = new EncuentroTorneo($this->id, $this->torneo, $this->nivel+1, $row["hijo_izquierdo"]);
			}			
			if($row["hijo_derecho"] != 0){
				$this->hijoDerecha = new EncuentroTorneo($this->id, $this->torneo, $this->nivel+1, $row["hijo_derecho"]);
			}
		}
		
		if($row["equipo1"]){
			$this->equipo1 = new EquipoTorneo();				
			$this->equipo1->id = ($row["equipo1"]);
			$this->equipo1->getFromDB();
		}
		if($row["equipo2"]){			
			$this->equipo2 = new EquipoTorneo();
			$this->equipo2->id = ($row["equipo2"]);
			$this->equipo2->getFromDB();
		}
		
		if(!$this->torneo)
			$this->torneo = $row["torneo"];
		
		$this->padre = $row["padre"];
		$this->golesEquipo1 = $row["goles_equipo1"];
		$this->golesEquipo2 = $row["goles_equipo2"];
		$this->fecha = $row["fecha"];
		$this->estado = $row["estado"];
		$this->comentarios = $row["comentarios"];
		$this->golesEquipo1Aux = + $row["goles_equipo1_aux"];
		$this->golesEquipo2Aux = + $row["goles_equipo2_aux"];
	}
	

	
	function getMatchFromDB(){
		if(!is_null($this->id)){
			$q = "SELECT * FROM ((SELECT 	p.id as id, 
									p.torneo as torneo, 
									t.tipo as tipotorneo, 
									p.estado as estado,  
									p.goles_equipo1 as goles_equipo1, 
									p.goles_equipo2 as goles_equipo2, 
									p.goles_equipo1_aux as goles_equipo1_aux, 
									p.goles_equipo2_aux as goles_equipo2_aux, 
									p.fecha as fecha, 
									j1.id as e1, 
									j1.jugador1 as e1j1,
									u1.jugador as e1j1nombre, 
									u1.usuario as e1j1usuario, 
									j1.jugador2 as e1j2, 
									u2.jugador as e1j2nombre,  
									u2.usuario as e1j2usuario, 
									e1.nombre as e1equiponombre, 
									e1.id as e1equipoid, 
									j2.id as e2, 
									j2.jugador1 as e2j1, 
									u3.jugador as e2j1nombre, 
									u3.usuario as e2j1usuario, 
									j2.jugador2 as e2j2, 
									u4.jugador as e2j2nombre, 
									u4.usuario as e2j2usuario, 
									e2.nombre as e2equiponombre, 
									e2.id as e2equipoid, 
									t.ida_vuelta as ida_vuelta  
					FROM 	partido_torneo as p, torneo as t, 
									jugadores as j1, usuarios as u1, usuarios as u2, equipos as e1, 
									jugadores as j2, usuarios as u3, usuarios as u4, equipos as e2 
					WHERE 	p.id = '".$this->id."' AND t.id = p.torneo  AND					
									j1.id = p.equipo1 AND u1.id = j1.jugador1 AND u2.id = j1.jugador2 AND e1.id = j1.equipo AND 
									j2.id = p.equipo2 AND u3.id = j2.jugador1 AND u4.id = j2.jugador2 AND e2.id = j2.equipo AND 
									j1.jugador2 != 0 AND j2.jugador2 != 0) 
					UNION 
					(SELECT 	p.id as id, 
									p.torneo as torneo, 
									t.tipo as tipotorneo, 
									p.estado as estado,  
									p.goles_equipo1 as goles_equipo1, 
									p.goles_equipo2 as goles_equipo2, 
									p.goles_equipo1_aux as goles_equipo1_aux, 
									p.goles_equipo2_aux as goles_equipo2_aux, 
									p.fecha as fecha, 
									j1.id as e1, 
									j1.jugador1 as e1j1,
									u1.jugador as e1j1nombre,
									u1.usuario as e1j1usuario,  
									j1.jugador2 as e1j2, 
									NULL as e1j2nombre,
									NULL as e1j2usuario,   
									e1.nombre as e1equiponombre, 
									e1.id as e1equipoid, 
									j2.id as e2,
									j2.jugador1 as e2j1, 
									u3.jugador as e2j1nombre, 
									u3.usuario as e2j1usuario,
									j2.jugador2 as e2j2, 
									NULL as e2j2nombre,
									NULL as e2j2usuario,  
									e2.nombre as e2equiponombre, 
									e2.id as e2equipoid, 
									t.ida_vuelta as ida_vuelta 
					FROM 	partido_torneo as p, torneo as t, 
									jugadores as j1, usuarios as u1, equipos as e1, 
									jugadores as j2, usuarios as u3, equipos as e2 
					WHERE 	p.id = '".$this->id."' AND t.id = p.torneo  AND 
									j1.id = p.equipo1 AND u1.id = j1.jugador1 AND e1.id = j1.equipo AND 
									j2.id = p.equipo2 AND u3.id = j2.jugador1 AND e2.id = j2.equipo AND 
									j1.jugador2 = 0 AND j2.jugador2 = 0))
					as Q";	
			$query = new mysqlQuery("tournament", $q, "", "", "", "", "");
			$query->execute();
			if($query->getCount() == 1){
				return $query->next();
			}else{
				return FALSE;
			}
		}
	}
		
	function mostrarEnfrentamientoTest($lado, $nivel, $altura, $im, $color, $anchoTotal, $altoTotal){
				
		if($this->padre == 0){
			$html = "";
			if($this->hijoIzquierda){
				$data = $this->hijoIzquierda->mostrarEnfrentamientoTest(-1, $nivel + 1, 0, $im, $color, $anchoTotal, $altoTotal);
				$top1 = $data[0];
				$xLine1 = $data[1];
				$yLine1 = $data[2];
				$html .= $data[3];
			}
			if($this->hijoDerecha){
				$data = $this->hijoDerecha->mostrarEnfrentamientoTest(1, $nivel + 1, 0, $im, $color, $anchoTotal, $altoTotal);
				$top2 = $data[0];
				$xLine2 = $data[1];
				$yLine2 = $data[2];
				$html .= $data[3];
			}
			
			$top = $top1 - DESPLAZAMIENTO_ARRIBA_FINAL;
			$left = $xLine2 + ($xLine1 - $xLine2)/2 - ANCHO/2;			
			$html .= '<div class="enfrentamiento" style="left: '.$left.'px; top: '.$top.'px;">';
			
			if($this->estado == MATCH_STATUS_VALIDATED){
				$html .= '<p class="goles-equipo1">'.$this->golesEquipo1.'</p>';			
				$html .= '<p class="goles-equipo2">'.$this->golesEquipo2.'</p>';
			}else{
				$html .= '<p class="goles-equipo1">-</p>';			
				$html .= '<p class="goles-equipo2">-</p>';
			}
			
			if($this->equipo1){
				$html .= '<div id="'.$this->equipo1->id.'" class="0">';				
				$html .= '<a name="'.$this->equipo1->id.'"></a>';
				$html .= '<p class="equipo">'.$this->equipo1->equipo->nombre.'</p>
							<p class="jugador">'.$this->equipo1->jugador1->nombre;
							if($this->equipo1->jugador2->nombre)
								$html .= ' & '.$this->equipo1->jugador2->id;
							$html .= '</p>';
				$html .= '</div>';
			}else{
				$html .= '<p class="equipo">Waiting</p>
							<p class="jugador">&nbsp;</p>';
			}
			
			if($this->equipo2){
				$html .= '<div id="'.$this->equipo2->id.'" class="0">';
				$html .= '<a name="'.$this->equipo2->id.'"></a>';
				$html .= '<p class="equipo">'.$this->equipo2->equipo->nombre.'</p>
							<p class="jugador">'.$this->equipo2->jugador1->nombre;
							if($this->equipo2->jugador2->nombre)
								$html .= ' & '.$this->equipo2->jugador2->id;
							$html .= '</p>';
				$html .= '</div>';
			}else{
				$html .= '<p class="equipo">Waiting</p>
							<p class="jugador">&nbsp;</p>';
			}
			
			if($this->equipo1 && $this->equipo2){
				$html .= '<a class="comments" href="index.php?s=match&id='.$this->id.'">'.$this->comentarios.'</a>';
			}
			$html .= '</div>';	
			
			$leftCup = $left + ANCHO/2 - 140/2;
			$topCup = $top - 200;
			
			$html .= '<div class="final" style="left: '.$leftCup.'px; top: '.$topCup.'px;"></div>';
			if($im != FALSE){
				imageline($im, $xLine1, $yLine1, $xLine1, $top + H, $color);
				imageline($im, $xLine2, $yLine2, $xLine2, $top + H, $color);
			}
			return $html;
		}else{
			
			$alturaHijoIzquierda = -1;
			$alturaHijoDerecha = +1;
			
			if($altura > 0){
				$alturaHijoDerecha = $altura * 2;
				$alturaHijoIzquierda = $alturaHijoDerecha - 1;
			}else if($altura < 0){
				$alturaHijoIzquierda = $altura * 2;
				$alturaHijoDerecha = $alturaHijoIzquierda + 1;
			}			
			$html = "";
			$left = ($anchoTotal/2 - (ANCHO+PADDING)/2) - ($nivel * (ANCHO+PADDING) * $lado);
			$top = 0;
			if(!$this->hijoDerecha && !$this->hijoIzquierda){
				$top = ($altoTotal / 2) + ($altura * ($altoTotal / pow(2, $nivel - 1))) + ($altoTotal / pow(2, $nivel - 1) * 2) -  H/2;
			}else{
				$top1 = 0; $top2 = 0;
				$yLine1 = 0; $yLine2 = 0;
				$data = NULL;
				if($this->hijoIzquierda){
					$data = $this->hijoIzquierda->mostrarEnfrentamientoTest($lado, $nivel+1, $alturaHijoIzquierda, $im, $color, $anchoTotal, $altoTotal);
					unset($this->hijoIzquierda);
					$top1 = $data[0];
					$xLine = $data[1];
					$yLine1 = $data[2];
					$html .= $data[3];					
				}			
				if($this->hijoDerecha){					
					$data = $this->hijoDerecha->mostrarEnfrentamientoTest($lado, $nivel+1, $alturaHijoDerecha, $im, $color, $anchoTotal, $altoTotal);
					unset($this->hijoDerecha);
					$top2 = $data[0];
					$yLine2 = $data[2];					
					$html .= $data[3];
				}				
				if($top1 > $top2)
					$top = $top2 + (($top1 - $top2) / 2);
				else
					$top = $top1 + (($top2 - $top1) / 2);
			}

			
			$html .= '<div class="enfrentamiento" style="left: '.$left.'px; top: '.$top.'px;">';
						
			if($this->estado == MATCH_STATUS_VALIDATED){
				$html .= '<p class="goles-equipo1">'.$this->golesEquipo1.'</p>';			
				$html .= '<p class="goles-equipo2">'.$this->golesEquipo2.'</p>';
			}else{
				$html .= '<p class="goles-equipo1">-</p>';			
				$html .= '<p class="goles-equipo2">-</p>';
			}
			
			if($this->equipo1){				
				$html .= '<div id="'.$this->equipo1->id.'" class="'.$lado.'">';
				$html .= '<a name="'.$this->equipo1->id.'"></a>';
				$html .= '<p class="equipo">'.$this->equipo1->equipo->nombre.'</p>
							<p class="jugador">'.$this->equipo1->jugador1->nombre;
							if($this->equipo1->jugador2->nombre)
								$html .= ' & '.$this->equipo1->jugador2->id;
							$html .= '</p>';
				$html .= '</div>';
			}else{
				$html .= '<p class="equipo">Waiting</p>
							<p class="jugador">&nbsp;</p>';
			}
			
			if($this->equipo2){
				$html .= '<div id="'.$this->equipo2->id.'" class="'.$lado.'">';
				$html .= '<a name="'.$this->equipo2->id.'"></a>';
				$html .= '<p class="equipo">'.$this->equipo2->equipo->nombre.'</p>
							<p class="jugador">'.$this->equipo2->jugador1->nombre;
							if($this->equipo2->jugador2->nombre)
								$html .= ' & '.$this->equipo2->jugador2->id;
							$html .= '</p>';
				$html .= '</div>';
			}else{
				$html .= '<p class="equipo">Waiting</p>
							<p class="jugador">&nbsp;</p>';
			}
			
			if($this->equipo1 && $this->equipo2){
				$html .= '<a class="comments" href="index.php?s=match&id='.$this->id.'">'.$this->comentarios.'</a>';
			}
			$html .= '</div>';
			
			/* Lineas de salida del encuentro */
			$y1 = $top + H/4;
			$y2 = $top + H/2 + H/4;
			$y3 = $top + H/2;
			$x1 = $left;
			if($lado > 0)
				$x1 += ANCHO;
			$x2 = $x1 + 8*$lado;
			$x3 = $x1 + ANCHO/2 * $lado;
			if($im != FALSE){
				imageline($im, $x1, $y1, $x2, $y1, $color);
				imageline($im, $x1, $y2, $x2, $y2, $color);
				imageline($im, $x2, $y1, $x2, $y2, $color);
				imageline($im, $x2, $y3, $x3, $y3, $color);
				
				if($yLine1 && $yLine2)
					imageline($im, $xLine, $yLine1, $xLine, $yLine2, $color);
			}
				
			return array($top, $x3, $y3, $html);
		}		
	}
}

?>